using UnityEngine;

/// <summary>
/// 浮动平台控制器
/// 实现功能：
/// - 在两个点之间来回移动
/// - 可选启用/禁用移动
/// - 玩家踩上后会随平台一起移动（通过 SetParent）
/// </summary>
public class FloatingPlatform_20250422 : MonoBehaviour
{
    [Header("移动参数")]
    public Transform startPoint;          // 起点（A点）
    public Transform endPoint;            // 终点（B点）
    public float moveSpeed = 2f;          // 移动速度（单位/秒）

    [Header("控制参数")]
    public bool isMoving = true;          // 是否启用移动功能

    // 私有变量
    private Transform target;             // 当前移动目标点
    private const float arrivalThreshold = 0.01f; // 判定“到达目标点”的最小距离（防止精度误差导致抖动）

    private void Start()
    {
        // ✅ 检查点是否指定
        if (startPoint == null || endPoint == null)
        {
            Debug.LogError("请指定 startPoint 和 endPoint。");
            enabled = false;
            return;
        }

        // ✅ 设置初始移动目标为终点
        target = endPoint;
    }

    private void FixedUpdate()
    {
        // ✅ 平台未启用或目标为空则不处理
        if (!isMoving || target == null) return;

        // ✅ 平滑移动平台朝向目标点
        transform.position = Vector3.MoveTowards(
            transform.position,
            target.position,
            moveSpeed * Time.deltaTime
        );

        // ✅ 如果平台已经抵达目标位置，切换目标点（往返）
        if (Vector3.Distance(transform.position, target.position) < arrivalThreshold)
        {
            target = (target == startPoint) ? endPoint : startPoint;
        }
    }

    // ✅ 可视化路径与端点（便于编辑器中查看平台移动轨迹）
    private void OnDrawGizmosSelected()
    {
        if (startPoint != null && endPoint != null)
        {
            Gizmos.color = Color.yellow;
            Gizmos.DrawLine(startPoint.position, endPoint.position); // 路径线

            Gizmos.color = Color.green;
            Gizmos.DrawSphere(startPoint.position, 0.1f); // 起点

            Gizmos.color = Color.red;
            Gizmos.DrawSphere(endPoint.position, 0.1f); // 终点
        }
    }

    // ✅ 玩家踩上平台时，把玩家设置为平台子对象，实现跟随效果
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            if (collision.transform.parent != transform)
            {
                collision.transform.SetParent(transform);
            }
        }
    }

    // ✅ 玩家离开平台时取消跟随
    private void OnCollisionExit2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            collision.transform.SetParent(null);
        }
    }
}
